function quickSort (startIndex, endIndex, arr) {
    if (startIndex >= endIndex) {
        return;
    }
    // 基准元素位置
    let pivotIndex = partition(startIndex, endIndex, arr);
    // 根据基准元素，分成两部分进行递归排序
    quickSort(startIndex, pivotIndex - 1, arr);
    quickSort(pivotIndex + 1, endIndex, arr);
    return arr;
}

function partition (startIndex, endIndex, arr) {
    // 取第一个位置的元素作为基准元素
    let pivot = arr[startIndex];
    let mark = startIndex;
    for (let i = startIndex + 1; i <= endIndex; i++) {
        if (arr[i] < pivot) {
            mark++;
            let p = arr[mark];
            arr[mark] = arr[i];
            arr[i] = p;
        }
    }
    arr[startIndex] = arr[mark];
    arr[mark] = pivot;
    return mark;
}
let array = [3, 4, 14, 1, 5, 6, 7, 8, 1, -1, 0, 9, 11]
console.log(quickSort(0, array.length - 1, array))